﻿// Inner Fire 游戏引擎库
// ConfigInfo - 配置文件基类
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：框架层(5)
// 任何一个配置都需要继承这个基类。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-07-05

#pragma once

#include <EASTL/vector.h>
#include <dx/texture/dx_texture.h>
#include <memory>
#include <static_string.h>
#include <klog.h>

namespace ifire::game {
class ConfigManager;

class ConfigInfo {
public:
  ConfigInfo(ConfigManager* manager, ikit::sstr name)
      : manager_(manager), id(getNextID()), name(name) {}
  ConfigInfo(const ConfigInfo& lhs) = delete;
  ConfigInfo& operator=(const ConfigInfo& lhs) = delete;
  ~ConfigInfo() = default;

  // 对资源进行装配，处理各种引用
  virtual void Setup() {}

  // 处理引用
  template <typename T>
  static void Setup(eastl::vector<std::unique_ptr<T>>& list) {
    for (auto& e : list) {
      e->Setup();
    }
  }

public:
  // 资源的名称
  ikit::sstr name;
  // 资源的ID
  std::uint64_t id;

protected:
  // 父级
  ConfigManager* manager_;
  
private:
  static uint64_t getNextID() {
    static uint64_t id = 0; // 静态局部变量，初始化为0
    return id++;            // 返回当前值后步进1
  }
};

} // namespace ifire::game